#include <stdio.h>
#include <stdlib.h>


/*++/-- 
 *变量在前：先把变量赋值表达式,在变量自增/自减
 *运算符在前:先表达式自增/自减,在变量自增/自减
 * */
void test1(void)
{
	int i = 2,j = 3,value;
	value = i++ + ++j;
	printf("[%s]value = %d\n",__FUNCTION__,value);
}




/*
 *逻辑运算符的短路特性
 * */
void test2(void)
{
	int m,n = 1;
	int val1 = 5,val2 = 8, val3 = 9;
	
	(m = val1 > val2 )&&(n = val3 > val2);

	printf("[%s]m=%d,n=%d\n",__FUNCTION__,m,n);

}
/*
 *sizeof测试字节数
 * */
void test3(void)
{	//返回的字节数（int）
	printf("[%s]\n",__FUNCTION__);
	printf("%d\n",sizeof(int));
	printf("%d\n",sizeof(double));
}





/*
 *强制类型转换: (类型) 不推建 太丑了
 *会有警告(gcc优化了就没有了)
 * */
void test4(void)
{
	printf("[%s]\n",__FUNCTION__);
	int intkey = 0;
	float floatkey = 3.9;
	intkey = floatkey;
	printf("intkey = %d, floatkey = %f\n",intkey,floatkey);
	
	printf("使用强制类型转换\n");
	
	int intkey2 = 0;
	float floatkey2 = 3.9;

	intkey2 = (int)floatkey2;
	printf("intkey2 = %d, floatkey2 = %f\n",intkey2,floatkey2);
	

}
/*
 *位运算 节约内存资源的读写权限系统                                                                                                                                                                                * */
void test5(void)
{
 /*
 *	char flag = 0,1,2,3;
 *	用二进制表示00 01 10 11
 *	char flag = 0-7;
 *	000 001 010 ...
 *
 *
 *	<< >> ~ | ^ &
 *	int i = B1100; //C语言不识别2进制,此处只是伪代码
 *	i<< 1 -->B1000 = 8 
 *	B1000 >>1 -->B0100 = 4
 *	左右移 相当于 *2   /2
 *
 *	~i = B0011; //取反
 *	
 *	int j = B1001;
 *	i | j = B1101;//按位或 有真则真
 *
 *
 *
 *	i & j = B1000; //按位与 两者为真才为真
 *
 *	i ^ j = B0101; //相同为0 不同为1
 * */



}

int main(void)
{
		test1();
		printf("===========\n");
		test2();
		printf("===========\n");
		test3();
		printf("===========\n");
		test4();
		exit(0);
}
